importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.AclUtils.js
//@include lib_sol.common.AsyncUtils.js
//@include lib_sol.common.WfUtils.js
//@include lib_sol.common.ix.RfUtils.js
//@include lib_sol.common.ix.FunctionBase.js
//@include lib_sol.contact.Utils.js
var logger = sol.create("sol.Logger", { scope: "sol.contact.ix.functions.MoveContact" });
/**
* Moves a contact element to a new location in a company if possible.
*
* # As workflow node
*
* ObjId is set based on the element that the workflow is attached to.
*
* # As IX function call
*
* In addition to the workflow node configuration the objId must be passed.
*
* sol.common.IxUtils.execute('RF_sol_contact_function_MoveContact', {
* objId: "4711"
* });
*
* |Property|Description|
* |:------|:------|
* |contactlist.referenceField|Reference field to the contact list|
* |contactlist.maskName|Mask for contact lists|
* |company.referenceField|Reference field to the company|
* |company.maskName|Mask for companies|
*
* @author JHR, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires handlebars
* @requires sol.common.SordUtils
* @requires sol.common.WfUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.FunctionBase
*
*/
sol.define("sol.contact.ix.functions.MoveContact", {
extend: "sol.common.ix.FunctionBase",
requiredConfig: ["objId"],
/**
* @cfg {String} objId (required)
*/
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
me.config = sol.contact.Utils.loadConfig();
},
/**
* Moves the contact element to a new location in a company or contact list if possible.
*/
process: function () {
var me = this,
alreadyMoved = false,
sord, rightsConfig, configPart;
sord = ixConnect.ix().checkoutSord(me.objId, EditInfoC.mbSord, LockC.NO).sord;
if (!sol.contact.Utils.isCompany(sord)) {
alreadyMoved = me.moveByReferenceField(sord, "CompanyReference", me.config.company.maskName, me.config.company.referenceField);
}
if (!alreadyMoved) {
me.moveByReferenceField(sord, "ContactlistReference", me.config.contactlist.maskName, me.config.contactlist.referenceField);
}
configPart = sol.contact.Utils.getConfigPart(me.config, sord);
rightsConfig = configPart.rightsConfig || {
mode: "SET",
inherit: true,
users: [{ name: "$CURRENTUSER", rights: { r: true, w: true, d: true, e: true, l: true, p: true } }]
};
sol.common.AclUtils.changeRightsInBackground(me.objId, rightsConfig);
},
/**
* @private
* Moves the contract to the correct lcation.
* @param {de.elo.ix.client.Sord} sord
* @param {String} refName
* @param {String} targetMask
* @param {String} refField
* @return {Boolean}
*/
moveByReferenceField: function (sord, refName, targetMask, refField) {
var me = this,
ref = sol.common.SordUtils.getObjKeyValue(sord, refField),
targetSord, oldParentId;
if (ref) {
targetSord = me.findSord({ mask: targetMask, objKeyData: [{ key: refField, value: ref }] });
if (targetSord) {
oldParentId = ixConnect.ix().checkoutSord(sord.id, EditInfoC.mbOnlyId, LockC.NO).sord.parentId;
me.logger.info(["move sord: ({0}) from -> ({1}) to ({2})", sord.id, oldParentId, targetSord.id]);
ixConnectAdmin.ix().refSord(oldParentId, targetSord.id, sord.id, -1);
return true;
} else {
me.logger.error(["could not resolve {0}: {1}", refName, ref]);
throw "could not resolve " + refName + ": " + ref;
}
}
},
/**
* @private
* Retrieves a sord by index value
* @param {Object} cfg
* @return {de.elo.ix.client.Sord}
*/
findSord: function (cfg) {
try {
return sol.common.RepoUtils.getSord(sol.common.RepoUtils.getObjIdByIndex(cfg));
} catch (ignore) {
// ignore
}
}
});
/**
* @member sol.contact.ix.functions.MoveContact
* @static
* @inheritdoc sol.common.ix.FunctionBase#onEnterNode
*/
function onEnterNode(clInfo, userId, wFDiagram, nodeId) {
logger.enter("onEnterNode_MoveContact", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId),
module;
params.objId = wFDiagram.objId;
module = sol.create("sol.contact.ix.functions.MoveContact", params);
module.process();
logger.exit("onEnterNode_MoveContact");
}
/**
* @member sol.contact.ix.functions.MoveContact
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(clInfo, userId, wFDiagram, nodeId) {
logger.enter("onExitNode_MoveContact", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId),
module;
params.objId = wFDiagram.objId;
module = sol.create("sol.contact.ix.functions.MoveContact", params);
module.process();
logger.exit("onExitNode_MoveContact");
}
/**
* @member sol.contact.ix.functions.MoveContact
* @method RF_sol_contact_function_MoveContact
* @static
* @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
*/
function RF_sol_contact_function_MoveContact(iXSEContext, args) {
logger.enter("RF_sol_contact_function_MoveContact", args);
var params, module;
params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "objId");
module = sol.create("sol.contact.ix.functions.MoveContact", params);
module.process();
logger.exit("RF_sol_contact_function_MoveContact");
}